<?php
/**
 * zen_libreria_POA.php
 * @author Juan Belon
 * @access public
 * @copyright LGPL, GPL
 * @package zen_POA
 * @version 0.1.1
 * @uses zenphp FrameWork
 * @link http://csl2-zenphp.forja.rediris.es
 * @link http://www.zenphp.es
 * @link https://forja.rediris.es/projects/csl2-zenphp/
 * @magic funciones para llamar a POA desde la consola o navegador
 * TODO: Completar la Documentación de las clases de POA
 */
// +----------------------------------------------------------------------
// | zenphp.es
// +----------------------------------------------------------------------
require_once "clase_zen_POA.php";
require_once "clase_zen_POA_Tejedora.php";
require_once "clase_zen_POA_Aspecto.php";
require_once "claze_zen_FabricaClases.php";
/**
* @desc Crea un proyecto
* @param str $ruta_fichero
* @param zen_POA_Tejedora $tejedora_del_destino
*/
function zen_crear_proyecto($ruta_fichero, $tejedora_del_destino = "./")
{
	// Comprobar si existe el fichero para ser compilado:
	if (!file_exists($ruta_fichero)) {
       	  trigger_error(
            _("<b>[Error Aspecto]:</b> El fichero <b>") . $ruta_fichero . _("</b> no existe!"),
            E_USER_ERROR
	  );
	}

	// Comprobar la sintaxis de los Aspectos
	if (!is_a($tejedora_del_destino, "zen_POA_Tejedora")) {
		$tejedora_del_destino =& new zen_POA_Tejedora($tejedora_del_destino);
	}

	// Recuperar información
	$_separador = (stristr(getenv("OS"), "Win") ? "\\" : "/");
	$dir = ((zen_POA::CACHE() == "") ? dirname($ruta_fichero) : zen_POA::CACHE()) . $_separador;

	// Definir la fecha de la última modificación
	$ultimaModificacion = filemtime($ruta_fichero);
    
    if ($ultimaModificacion < $tejedora_del_destino->obtenerUltimaModificacion()) {    
		$ultimaModificacion = $tejedora_del_destino->obtenerUltimaModificacion();
	}   

	// Extensión del fichero de la clase compilada- ".php" añadido para habilitar que se ejecute por el módulo PHP de Apache
    $ficheroClaseCompilado = basename($ruta_fichero, "php") . md5($ruta_fichero) . ".php";

	/* Comprobar si es necesario compilar el fichero
	   Condiciones: 
            + Se han de definir aspectos
	        + El fichero compilado (ya) no existe
	        + El fichero compilado es más viejo que uno o más de los aspectos
	        + Se obliga a recompilar (por el programador)
    */
    zen_POA::compilar($ruta_fichero, $dir . $ficheroClaseCompilado, $tejedora_del_destino); 
	/*if (!$tejedora_del_destino->tieneAspectos() ||
		!file_exists($dir . $ficheroClaseCompilado) ||
        filemtime($dir . $ficheroClaseCompilado) <= $ultimaModificacion ||
		zen_POA::RECOMPILAR()) {
    	zen_POA::compilar($ruta_fichero, $dir . $ficheroClaseCompilado, $tejedora_del_destino);
	}   */

	// Comprobar si el fichero compilado existe:
	if (file_exists($dir . $ficheroClaseCompilado)) {
    	// Cargar el fichero compilado:
		require_once $dir . $ficheroClaseCompilado;
	} elseif($tejedora_del_destino->tieneAspectos() === false) {
		// Cargar el fichero original (sin aspectos definidos)
		require_once $ruta_fichero;
	} else {
		trigger_error(
			_("<b>[Error Aspectos]:</b> El fichero compilado <b>") . $dir . $ficheroClaseCompilado . _("</b> [Del Original: <b>") . $ruta_fichero . _("</b>] no se ha podido cargar!"),
			E_USER_ERROR
		);
	}
    
}

?>